const jwt = require('jsonwebtoken');
const Response = require('../utils/response');
const logger = require('../utils/logger');
require('dotenv').config();

/**
 * 认证中间件
 * 验证请求头中的JWT token
 */
const authMiddleware = (req, res, next) => {
  try {
    const token = req.headers.authorization?.split(' ')[1];
    if (!token) {
      return res.status(401).json({
        code: 401,
        message: '未提供token'
      });
    }

    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch (error) {
    logger.error('Token验证失败:', error);
    return res.status(401).json({
      code: 401,
      message: 'token无效'
    });
  }
};

// 临时解决方案：如果没有安装jsonwebtoken，提供一个简单的中间件
const simpleAuthMiddleware = (req, res, next) => {
  // 为了开发方便，添加一个模拟用户
  req.user = {
    id: 1,
    username: 'admin',
    role_id: 1
  };
  next();
};

// 导出中间件
// 根据是否安装了jsonwebtoken选择合适的中间件
let middleware;
try {
  // 尝试加载jsonwebtoken
  require('jsonwebtoken');
  middleware = authMiddleware;
} catch (error) {
  // 如果没有安装jsonwebtoken，使用简单中间件
  console.warn('警告: jsonwebtoken模块未安装，使用简单认证中间件');
  middleware = simpleAuthMiddleware;
}

module.exports = {
  authMiddleware: middleware
}; 